In this [[chapter]] we describe the [[Agora]], a [[protocol]] and reference [[platform]] yielding a [[knowledge commons]] provisioned by a self-governing community. This commons is bootstrapped as a [[distributed knowledge graph]] assembled from off-the-shelf components, upholding the user’s [[data sovereignty]] while supporting integration with a wide range of [[tools for thought]].
The Agora as described in this article is just [[an Agora]], meaning it should be taken as a simple [[reference implementation]] of the principles delineated in this paper. Because the Agora-defining [[Agora protocol]] tries to build on common principles1 and incorporate conventions already in use at the time of writing, you will likely find that other Agoras already exist online and offline — if not by name, then definitely in values and direction. When in doubt, the author2 likes to assume that all Agora-like entities we find will eventually be part of a greater [[confederated]] [[Agora network]]. Put another way, the reference Agora described here is just one possible seed from which an [[Agora network]] may grow.
A core aspect of the provided [[reference Agora]]3 is that its constituent [[distributed knowledge graph]] can be straightforwardly bootstrapped using just a well-defined freely-available subset of the [[internet]]. The provided software can already integrate crowdsourced sets of [[personal knowledge graphs]], [[digital gardens]], [[wikis]] and [[feeds]] of all kinds (including social), generalizing to arbitrary repositories maintained manually or via readily available [[tools for thought]] (both open and closed in nature). All supported data sources are retrieved and integrated using [[free software]], while still supporting production and editing with arbitrary tools of the users’ choice.
As hinted above, the Agora is a project with multiple facets which we will try to explore in order in this paper:
The triad above fits together in a variety of ways that we will try to explore in relevant sections, but in a nutshell: [[Agora protocol]] can be used by the community while interacting with the [[Agora platform]] to provision entities, intents and services in the [[Agora commons]].
We2 then cover experiments and potential applications in the [[academic]], [[social]] and [[political]] domains assuming the availability and widespread adoption of a free [[knowledge commons]]. This is done in the form of a series of short reports and exploratory essays.
The Agora can be defined most generally as a subset of the [[internet]]4 used consciously and towards a particular purpose. Slightly less generally, as per the above, it can be seen as a platform and a protocol for provisioning and maintaining a [[commons]] (initially digital) enabling a community to efficiently define and advance their goals. Because of these broad definitions and the wide applicability of the principles detailed in this article, the background required to put this effort in context is ample and fuzzily defined at the edges.
The Agora is inspired by the work of many. Here we mention some of the core influences.
Finally, a [[caveat emptor]]: the [[reference Agora]] is highly [[idiosyncratic]]. It is [[linked]] to a pragmatic project directed towards world improvement, specifically an experiment in [[protopian thinking]] applied to [[global reform and revolution]]. This project tries to explore the full nature of the internet as it could be, using the [[tools]] at hand to work on pressing [[tasks]] as we try to optionally improve the world together. More concretely, [[Flancia]] is an exploration on the power of [[tools of thought]], including [[social media]] and more generally distributed [[writing]], to advance [[altruism]], [[rationality]] and [[loving kindness]].
The heart of an Agora is the [[Agora Commons]]. It is a [[digital commons]] to start with, extending potentially to an inclusive virtual and real [[commons]] able to sustainably support its associated communities materially.
The [[Triad of Commoning]] as described in [[Free, Fair and Alive]] can be seen to apply to the [[knowledge commons]] we would like to build here, and this informs the design of the [[Agora project]]:
TODO (Diagram): [[Triad of Commoning]] as it maps to the triad of the [[Agora project]]: [[Agora Protocol]], [[Agora Platform]], [[Agora Commons]]? But the later sounds like a category mistake now. Is the Agora just recursive? :) Maybe this works better if we just mention [[intents]].
TODO (Text Structure): Making the commons a higher level section would probably clarify the structure a bit, allow me to bring in the [[Triad of Commoning]], etc. — but maybe this has already happened, check/fix once we’re in [[Google Docs]] as it’ll probably be easier then.
This project is of large scope and makes use of terminology from different fields, drawing from computer science, systems thinking and political theory. It also makes use of metaphors. To aid understanding, here we provide a short summary of key terms to follow.
This section details intents, goals and values as they relate to the definition of an Agora on a high level.
An [[Agora]] tries to meet the user where they are. As a service in the internet, you don’t sign up to an Agora: you sign in. Albeit the reference Agora is based firmly on [[web 1]] principles and core [[web]] protocols and architectural styles like [[http]], [[rdf]] and [[rest]], it also includes partial implementation of [[social]] protocols like [[activitypub]] which affords it a basic level of integration with the [[Fediverse]] and Twitter[^twitter].
In the terms of the [[Knowledge Futures Group]], the [[reference Agora]] is a system that provisions an [[overlay]] (demo at https://anagora.org) querying an [[interlay]] ([[go/agora]], the [[Agora Commons]]) integrating [[repositories]] from a primarily [[git]] based [[underlay]].
With this tool the Agora community can embark on shared projects. The author, as one member of the [[Agora community]], would like to propose (offer) a series of [[projects]] as public collections of [[intents]] in the [[commons]].
Let us use [[Agora Protocol]] if we may.
This section describes a [[protocol]] for publicly defining sets of [[intents]] that can be said to define an Agora. An Agora is a public space that defines itself as such and follows an explicit variation of the Agora Protocol by [[convention]].
In text format, [[Agora Protocol]] is a series of typographical conventions that allow users to link and annotate resources regardless of the medium. Annotating here stands for encoding metadata and personal meaning in resources in a way conducive to be later decoded in an Agora-like [[context]].
If you are reading this book, you probably know Agora Protocol even before reading about it; it is meant to reflect and build on existing practices in the personal knowledge management space, like:
On a pragmatic level: if a person declares a public space or shared resource to be in an [[Agora]], it is in the Agora by definition. This extends to conversations in the real world.
Agora Protocol is parsed by every Agora. On interpreting a statement as an intent, an Agora may take action for the benefit of the user.
An Agora always links by default. Users can opt into automatic saving of resources, meaning storage of resources in a repository under the users’ (preferred) or an Agora’s control.
When interpreting the above and extensions, an Agora is liberal in what it accepts and when in doubt tries to default to being extra useful to the user — meaning it is optimistic in association and surfaces all resources that have a claim to be associated with the context being served. For example: #CamelCase will be provided in all contexts matching [[camel case]] and all known variations, and this relationship is symmetric by default, in the sense that the user might provide either at write time and be later served matching resources in either context.
To put it simply, an Agora defines equivalence classes optimistically with good intention. Later we will discuss the hypothesis that this is an optimal default policy for a social platform.
Note that outlines plus [[linking]] seem sufficient to encode thoughts and structure of arbitrary complexity in a human readable way8. In the opinion of the author this seems sufficient to encode a [[hypergraph]] in a human friendly way, which might do away with the need for programmatically generated [[block references]]9. See [[Technical Specifications]] below for more.
Next we describe how [[Agora Protocol]] can help provision an [[Agora Platform]] which integrates pro-socially with the wider internet ecosystem, and how a community could use both to run experiments on distributed thought.
This facet of the Agora is that which is closest to the realm of software. See [[Reference Agora]] and [[Technical Specifications]] below for more details.
The Agora Platform as described in this article is decentralized in nature: it is meant to be a pragmatic stopgap solution that is relatively easy to bootstrap and still able to compete with the centralized platforms that currently dominate the market in many fields and might vie for enclosing the [[knowledge commons]] soon. A fully distributed architecture might be preferable soon — surely soon after achieving and ensuring [[knowledge independence]] for future generations. But a [[decentralized]] model like that used widely in the [[Fediverse]] has core strengths that suggest it might be a good fit for bootstrapping a [[knowledge commons]].
Individual Agora instances, initially provisioned and maintained by like-minded groups in a [[decentralized]] ([[Fediverse]] compatible) model, but tending towards a fully [[distributed]] model, are expected to federate in a greater [[Agora network]]10.
An Agora tries to be a [[repository]] of [[patterns]] in the tradition of [[Christopher Alexander]], [[Ward Cunningham]], [[David Bollier]], [[Silke Helfrich]] and [[Murray Bookchin]].
The Agora network is built on a federated protocol the aim of reducing friction to cross-tool cooperation and maximizing the constructiveness of forks.
Take the case in which two groups might temporarily diverge in their views to want to run separate Agoras. Ideally their instances should be able to continue to cooperate on problems and solutions for which there is enough values/ideological alignment. Persistent best effort cooperation as a default contract also maximizes the chance of re-convergence leading to a merge.
A [[bridge]] is a process or device that can be set up to transfer resources across (previously isolated) networks, either one-time or recurringly.
Bridges are useful in that they lower friction for users to move across tools and platforms in an ecosystem, and to keep control of their data (as a bridge can be made to cross post data to a repository under the user’s control, or compatible with the user’s data sovereignty).
Bridges are the main tool we have to enact [[counter anti disintermediation]] and push back against [[walled gardens]].
An Agora tries to provide safe, useful bridges to the community as a public service.
A [[siphon]] can be seen as a bridge across which [[flow]] happens efficiently after some initial [[effort]], with cost-benefit often following a Pareto-like 20-80 distribution. Many Agora siphons are specialized to perform pro social [[adversarial interoperability]].
An example siphon would be a bridge with a one-time setup cost (e.g. an end user having to set up an API key for a walled garden) but which can then be run continuously afterwards at low cost (of maintenance on behalf of the user, and of computation).
An Agora is a [[knowledge commons]] provisioned and maintained by a self-governing community for [[public good]].
A [[commons]] consists, at a minimum11, of:
An [[Agora]]‘s [[root repository]] is a [[seed]] for an Agora. In the provided reference Agora platform, the root is a [[git]] repository12 which contains:
sources.yaml
file containing a list of all repositories to be integrated into an Agora plus useful metadata.CONTRACT.md
file containing a list of assertions declaring high level goals and values for the Agora. README.md
file containing instructions on how to provision an Agora using the above and free software.An Agora contains collections of [[common]] and [[personal]] intents.
By becoming part of the reference Agora, users endorse [[common]] intents by default, but can [[opt out]] of any intents perceived as problematic. In addition they can contribute personal intents which can be endorsed by other users, thus becoming [[common]].
These are sample intents of the [[author]]. They can be optionally endorsed by users of an Agora.
Intents in [[Agora protocol]] can be interspersed in long form writing, in which case they can act as human-readable metadata.
[[Tree structures]] with [[wikilinks]] are assumed by an Agora to carry [[Agora protocol]] by default, and may be elided or hidden when performing human-readable format conversions through [[Agora sync]].
[[Agora RFCs]] are the standard way to suggest extensions and modifications to [[Agora Protocol]].
They are meant to be cheap to write, and conducive to running experiments. RFCs are specified by nodes declaring themselves to contain an Agora RFC; a number might be provided by an Agora, but at present time there is no mechanism for allocating numbers except claiming one by pushing an RFC to it in the Agora of Flancia (or any other trusted root). Conflict resolution is done by the community of the Agora. To put it bluntly, an Agora is its own [[numbers Czar]]13.
Agora RFCs might be of varying length and detail, spanning in length from that of common IETF RFC to a tweet or toot describing a social custom to be considered by the community. RFCs which are judged promising by a community will generate and can be expounded about at greater length by the interested community and potentially worked upon in a [[Stoa]].
An [[Agora Action]] is a hint left in some medium by a user of [[Agora Protocol]] for the Agora. The purpose of the hint (its nature) is defined by the action; in general, though, Agora actions can be seen as lightweight contracts between an Agora and its authors. Invocations of an action are interpreted as [[intents]].
An [[Agora Action]] is hinted by default by #tagging or [[linking]] the name of the action in resources, optionally next to nodes and URLs which the action might take as parameters.
The sections below should clarify this.
#go is an [[Agora Action]] that designates URLs as canonical or highly ranked references for nodes in which the action appears.
Go links provide an interesting base case to study in the field of provisioning and (pro socially) exploiting14 a [[knowledge commons]]. Put simply, [[go links]] are named social bookmarks — strings of text (usually slugged, but not necessarily) associated with URLs by users in a community of practice.
[[Go links]] are a [[cognitive tool]] which was developed in [[Silicon Valley]] corporations and has the potential to spread and provide utility at internet scale. As [[cognitive artifacts]] they have a meaningful [[complementary]] component, which makes them interesting as a case study of [[Agora RFCs]] regardless of primary utility of application.
As an [[Agora action]], the contract provided by Go links is as such:
The primary utility of Go Links, regardless of implementation details, is high. In a [[go links]] rich environment, users can depend on other users to have defined [[canonical links]] for named [[entities]]; that is, collections of specially relevant resources to the terms at hand, as shared in a [[commons]].
#pull is an Agora Action. Its effect is Agora dependent but is, in essence, a form of [[transclusion]]: pull will result in a remote mental context being embedded in the current one.
#pull takes a [[node]], a [[node/heterarchy]] or a URL. Nodes might be embedded by an Agora using special in-Agora provisions. URLs might be embedded in web browsers according to X-Frame policies.
#push is an Agora Action. Its effect can also be described as transclusion, but in the opposite direction: whereas Pull will transclude a remote context in the current context, Push will transclude the current context in a remote context. Push can be thought of as publishing to a [[topic]] in a PubSub system.
#push takes a [[node]], a [[node/heterarchy]] or a URL. The meaning of pushing to a node is to publish the blocks or context in the destination node; the reference Agora publishes them in a similar format to local resources, either preceding them or after them depending on configuration. The meaning of pushing to a heterarchy (or "path") is to request attaching the resource or context at a point of insertion identified by the heterarchy as an anchor, if one is found (essentially allowing to fine tune placement).
In an Agora, section headings may push the whole section to mentioned nodes.
A resource can be declared a [[Stoa]] by tagging it as such. This marks it as a resource meant for [[cooperation]] or [[commoning]].
This section explores possible further applications in the social and knowledge spaces in the form of a series of short essays.
An Agora tries to solve all of these based on social signals contributed to the commons:
P
of all problems:S(P)
.S(P)
:R(S(P))
.P
, S
and R
they agree with, in the sense that they believe they are feasible, true, interesting.Once a week or a month (depending on the time of the year), the [[Agora community]] proposes a set of nodes to be provisioned loosely concurrently over the next period — meaning nodes to be contributed to individually, at roughly the same time.
Thank you to [[neil]] and the [[agora community]]!
A [[knowledge commons]] may be conducive to tackling the issue of regulating markets responsibly. A commons can essentially embed a federated network of ethical markets; the community of commoners can agree on the definition of such network and the rules which they which to enforce on transactions through the interface.
Commons can be seen to be well positioned to operate as meta-markets in a world (and internet) where markets, originally distributed in nature, have been coopted by corporations.
Application stores worldwide, the dominant bookseller in many countries — all work as centralized markets that can impose high trading fees because of the lack of competition. It seems evident we must avoid this same scenario from reoccurring in the [[Tools for Thought]] space; a federated network is needed. But corporate profit driven interests are likely already dreaming of taking hold of the space; how can we stop them?
Simple, maybe: we must retreat up a level and build a healthy integration layer that pushes back against early efforts to build walled gardens around tools and their strong communities. We must build bridges out of walled gardens and into the commons and there provide services to users of a wide range of tools, and enable ethical corporations to use these bridges to also provide these services.
The blocks that follow, and others in the current text in the same [[console typeface]], are a self-documenting demonstration of text based [[Agora Protocol]].
The Agora [[knowledge graph]] can be defined as a hypergraph A
with a set of k
nodes N
([[entities]] an Agora knows about) integrated out of subnodes SN_0 .. SN_k
, each containing subedges SE_0 .. SE_k
, aggregating into edges E_0 .. E_k
(semantic links between entities inferred from known subnodes). Edges are annotated implicitly by link context and explicitly via the use of [[agora protocol]] affordances, which is extensible and tries to build on existing conventions in the [[personal knowledge management]] space.
An Agora differs from other projects in the personal knowledge space in a few ways: whereas a personal knowledge graph usually contains resources authored or collected by a single person, and a wiki usually contains resources produced by a group, an Agora contains, integrates and interlinks both personal and group resources. Whereas links in a personal knowledge graph or wiki usually have a single target, Agora links fan out by default and can be thought of as queries mapping to sets of resources. This is consistent with a general design principle of facilitating storage and retrieval of entity-mapped information with a view toward removing friction from agreement and cooperation.
Building on these general principles and a [[free software]]3 reference implementation of the underlying protocols and data, we model and detail how to implement a distributed system that provisions social knowledge services ethically and sustainably with a focus on upholding [[data sovereignty]] principles. We then analyze some of the potential applications of such a system. Finally, we shortly explore future work and implications assuming that the Agora network is run as a [[confederated]] system for the [[public good]].
N
(each mapping to an entity in a knowledge base) and edges E
(each mapping to a relationship between entities, annotated by context). N
is known as a subnode N_s
. Here we cover some details of the provided free and open source reference Agora which provides a minimum viable implementation of the [[underlay]], [[interlay]], and [[overlay]] components of a [[distributed knowledge graph]]17.
The [[Agora platform]], although strictly rooted in [[web 1]] principles in its reference implementation as of the time of writing, is based on a strictly distributed model: by default users are entities that inform an Agora of repositories they want to contribute to the [[commons]]. As such, an Agora is trivially distributed in the sense that all data required to bootstrap it is hosted independently by users at independent locations19.
This section triers to summarize the endpoints that [[Agora server]] provides and plans to provide.
Agoras can define mappings from these to URL schemes generalizing to isomorphic REST-like APIs using agora.yaml
21.
The author would like to thank [[Flancia Collective]], the [[Agora community]], and the [[Fellowship of the Link]]: for your inspiration, interest, guidance.
To my [[friends]]: for your ongoing love and support.
To you: for reading.
To all the Agora builders and maintainers through history, including those of the motivating historical [[poleis]] and those who will build Agoras for the peaceful cities and countries of the future.
Finally, some friendly parting words: if you don’t like this [[Agora]], rest assured that’s perfectly alright — it is early stage. The [[Agora of Flancia]] is [[open source]]; these projects have [[Apache]] and [[Creative Commons]] licenses respectively. Please consider improving them!
both commonsense and related to instances of [[commoning]].↩
The provided [[reference Agora]] tries to remain tool, format and platform agnostic, building on general conventions common to many tools and platforms in the knowledge space for ease of integration and maximal inclusivity22 and diversity23. ↩
Or [[Web]]? See literature for most common term, likely web due to ties to the [[semantic web]] if nothing else.↩
As per Matuschak and Nielsen (2022), Kenneth Iverson seems to be the source of the currently dominant blanket term "[[tools for thought]]" — although I can report he didn’t use it in his seminal paper, preferring instead "[[tools of thought]]". I use these two interchangeably, maybe preferring the latter due to it giving thought agency.↩
As of the time of writing the reference Agora can’t publish to fedwiki, but can import fedwikis into the Agora Commons as repositories.↩
An Agora is a repository of [[patterns]] and its design owes a lot to [[Christopher Alexander]], [[Ward Cunningham]], [[David Bollier]], [[Silke Helfrich]] and the [[commoning]] community.↩
indentation is sufficient↩
Hypothesis: [[Block References]] are suboptimal as [[cognitive devices]] due to being [[competitive]], whereas user generated IDs and encoded structure can be [[complementary]].↩
An Agora is part of the Fediverse.↩
https://logicmag.io/commons/singular-plural/ (or https://anagora.org/go/singular+plural as of the time of writing.)↩
https://github.com/flancian/agora (or https://anagora.org/go/agora as of the time of writing.)↩
https://www.rfc-editor.org/rfc/rfc8700.html#name-the-rfc-management-and-edit↩
TODO: there’s probably a better term for this in [[Free, Fair and Alive]].↩
TODO: find paper or good up to date reference.↩
"Stephen Wolfram likes them." — see for example https://www.wolframphysics.org/technical-introduction/.↩
it is an expression of the [[pattern]] [[chorus of voices]].↩
as of the time of writing, GitHub is the most popular git host, but not by much (TODO: percentage goes here). This is likely suboptimal as it undermines the claim of the resulting [[knowledge commons]] of being truly [[distributed]], and can be seen as an instance of the (anti-)pattern [[Anti Disintermediation]].↩
https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)↩
or TOML?↩
Rendering context...